<?php
require_once('to/EncOp.php');

class EncOpDAO {
	const SEL_OPS_POR_ENCUESTA = "SELECT * FROM encop WHERE encuestaid = %d";
	const UPD_ADD_VOTE = "UPDATE encop SET numVotos = numVotos + 1 WHERE encopid = %d";
	const SEL_TOTAL_VOTES = "SELECT SUM(numVotos) as TotalVotes FROM encop WHERE encuestaid = %d";

	public static function getVoteResults($encuestaid){
		//getSumVotes
		$sSql = self::SEL_TOTAL_VOTES;

		$DB = DBFunctions::getInstance();
		$TotalVotes = $DB->execSelect($sSql, array($encuestaid));

		//pass actual values along with sumVotes to populateVotes
		$sSql = self::SEL_OPS_POR_ENCUESTA;

		$DB = DBFunctions::getInstance();
		$arrEncOps = $DB->execSelect($sSql, array($encuestaid));

		return self::populateVotes($arrEncOps, $TotalVotes[0]["TotalVotes"]);
	}

	public static function addVote($encopid){
		$sSql = self::UPD_ADD_VOTE;

		$DB = DBFunctions::getInstance();
		$DB->execQ($sSql, array($encopid));
	}

	public static function getOpsPorEncuesta($encuestaid){
		$sSql = self::SEL_OPS_POR_ENCUESTA;

		$DB = DBFunctions::getInstance();
		$arrEncuesta = $DB->execSelect($sSql, array($encuestaid));

		return self::populate($arrEncuesta);
	}

    private static function populate($arrEncOps){

        $objEncOps = array();

        foreach($arrEncOps as $A){
            $objEncOp = new EncOp();
            $objEncOp->setEncopId($A["encopid"]);
            $objEncOp->setEncuestaId($A["encuestaid"]);
            $objEncOp->setEncop($A["encop"]);
            $objEncOp->setNumVotos($A["numVotos"]);

            array_push($objEncOps, $objEncOp);
        }
        return $objEncOps;
    }

	private static function populateVotes($arrEncOps, $totalVotos){
		$objEncOps = array();

		foreach($arrEncOps as $A){
			$objEncOp = new EncOp();
			$objEncOp->setEncopId($A["encopid"]);
			$objEncOp->setEncuestaId($A["encuestaid"]);
			$objEncOp->setEncop($A["encop"]);
			$objEncOp->setNumVotos($A["numVotos"]);

			$porcentaje = round(($A["numVotos"]/$totalVotos)*100);

			$objEncOp->setPorcentaje($porcentaje);

			array_push($objEncOps, $objEncOp);
		}
		return $objEncOps;

	}
}
